package com.baichang.taoshunda.service;

import com.baichang.framework.excelption.ServiceException;
import com.baichang.taoshunda.entity.BankcardType;
import com.baichang.taoshunda.entity.UserBank;

import java.util.List;
import java.util.Map;

public interface UserBankService {

    /**
     * 根据商家编号获取商家的银行卡
     *
     * @param bussId 商家编号
     * @return
     */
    List<Map<String, Object>> findBusinessBankCard(Integer bussId);

    /**
     * 修改商家银行卡
     *
     * @param bankId     银行卡编号
     * @param bankTypeId 类别编号
     * @param bankNo     银行卡号
     * @return
     */
    boolean updateBusinessBankCard(Integer bankId, Integer bankTypeId, String bankNo);

    /**
     * 解绑银行卡
     *
     * @param bussId 商家编号
     * @param bankId 银行卡编号
     * @return
     */
    boolean unBundling(Integer bussId, Integer bankId) throws ServiceException;

    /**
     * 根据编号获取银行卡信息
     *
     * @param bankcardId 商家编号
     * @return
     */
    Map<String, Object> getUserBankById(Integer bankcardId);

    /**
     * 根据编号查看银行卡
     *
     * @param bussId
     * @return
     */
    UserBank getUserBankBeanById(Integer bussId) throws ServiceException;

    /**
     * 解绑银行卡
     *
     * @param disId  配送员编号
     * @param bankId 银行卡编号
     * @return
     */
    boolean unBundlingByDisId(Integer disId, Integer bankId) throws ServiceException;

    /**
     * 修改银行卡信息
     *
     * @param bankId     银行卡编号
     * @param bankTypeId 银行卡类型编号
     * @param bankNo     银行卡号
     * @return
     */
    boolean updateBankCard(Integer bankId, Integer bankTypeId, String bankNo);

    /**
     * 查询配送员的所有银行卡
     *
     * @param disId 配送员编号
     * @return
     */
    List<Map<String, Object>> findDeliveryBankCard(Integer disId);

    /**
     * 查看银行
     *
     * @return
     */
    List<BankcardType> findBank();

    /**
     * 绑定银行卡
     *
     * @param bussId     商家编号
     * @param cardTypeId 银行编号
     * @param cardNumber 银行卡号
     * @param userName   用户名
     * @return
     */
    boolean bussinessBundling(Integer bussId, Integer cardTypeId, String cardNumber, String userName) throws ServiceException;

    /**
     * 检查银行卡是否绑定
     *
     * @param bussId     商家编号
     * @param cardTypeId 银行编号
     * @param cardNumber 银行卡号
     * @return
     */
    boolean checkBundling(Integer bussId, Integer cardTypeId, String cardNumber) throws ServiceException;

    /**
     * 添加配送员银行卡信息
     *
     * @param deliveryId 配送员编号
     * @param cardTypeId 银行类型
     * @param cardNumber 卡号
     * @param userName   用户名
     * @return
     */
    boolean addDeliveryBankCard(Integer deliveryId, Integer cardTypeId, String cardNumber, String userName);

    /**
     * @param bankcardId
     * @return
     */
    Map<String, Object> getDeliveryBankById(Integer bankcardId);

    /**
     * 检查是否绑定银行卡
     *
     * @param disId      配送员编号
     * @param bankId     银行卡编号
     * @param cardNumber 银行卡号
     * @return
     */
    boolean checkBundlingByDisId(Integer disId, Integer bankId, String cardNumber) throws ServiceException;

    /**
     * 功能描述:
     *
     * @param userId     用户编号
     * @param cardTypeId 银行卡类型编号
     * @param cardNumber 银行卡号
     * @param userName   持卡人名称
     * @return:
     * @auther: wsl
     * @date: 2018/11/29 16:19
     */
    boolean addUserBankCard(Integer userId, Integer cardTypeId, String cardNumber, String userName);

    /**
     * 功能描述:
     *
     * @param:
     * @return:
     * @auther: wsl
     * @date: 2018/11/29 16:39
     */
    boolean unBundlingByUserId(Integer userId, Integer bankId) throws ServiceException;

    /**
     * 功能描述:
     *
     * @param userId 用户编号
     * @return:
     * @auther: wsl
     * @date: 2018/11/29 17:04
     */
    List<Map<String, Object>> findUserBankCard(Integer userId);

    /**
     * 查询用户的默认银行卡
     *
     * @param userId
     * @return
     */
    Map<String, Object> findUserDefaultBankCard(Integer userId);

    /**
     * 添加提现记录
     *
     * @param userId
     * @param bankCardId
     * @param money
     * @param type
     * @return
     */
    boolean cash(Integer userId, Integer bankCardId, Double money, Integer type) throws ServiceException;
}
